/* FileIO.h - File IO
 * 
 *  Author          : Alexander J. Yee
 *  Date Created    : 01/24/2015
 *  Last Modified   : 12/30/2015
 * 
 *      std::string paths are assumed to be UTF-8.
 * 
 */

#pragma once
#ifndef ymp_FileIO_H
#define ymp_FileIO_H
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Dependencies
#include <vector>
#include <string>
#include "PublicLibs/Types.h"
namespace ymp{
namespace FileIO{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void    CompileOptions      ();
////////////////////////////////////////////////////////////////////////////////
bool    MakeDirectory       (const std::string& path);
void    RenameFile          (const std::string&, const std::string& newname);
ufL_t   GetFileSize         (const std::string& path);
bool    FileExists          (const std::string& path);
void    RemoveFile          (const std::string& path);
bool    DirectoryIsWritable (const std::string& directory);
std::vector<std::string> list_directory(const std::string& path);
////////////////////////////////////////////////////////////////////////////////
int     GetLastErrorCode    ();
void    PrintLastError      ();
extern  upL_t   SetFileLengthFailures;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
}
}
#endif
